package com.ysm.smfu.fragment;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.annotation.Nullable;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.NotificationCompat;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.DownloadListener;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

import com.google.gson.Gson;
import com.ysm.smfu.R;
import com.ysm.smfu.activity.FoundActivity;
import com.ysm.smfu.bean.UserInfos;
import com.ysm.smfu.contans.SpKey;
import com.ysm.smfu.protocal.BaseProtocal;
import com.ysm.smfu.protocal.MyStringCallBack;
import com.ysm.smfu.utils.JsonUtil;
import com.ysm.smfu.utils.NotificationUtil;
import com.ysm.smfu.utils.SignUtil;
import com.ysm.smfu.utils.StoreInfo;
import com.ysm.smfu.utils.PrintUtil;
import com.ysm.smfu.utils.ToastUtils;
import com.ysm.smfu.utils.UIUtils;
import com.ysm.smfu.utils.WebView_FileUtils;
import com.ysm.smfu.welcome.SharedConfig;
import com.hyphenate.EMCallBack;
import com.hyphenate.chat.EMClient;
import com.tencent.mm.sdk.modelpay.PayReq;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
import com.zhy.http.okhttp.OkHttpUtils;
import com.zhy.http.okhttp.callback.FileCallBack;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.File;
import java.util.Random;

import chatuidemo.DemoHelper;
import chatuidemo.db.DBManager;
import okhttp3.Call;

/**
 * Created by Administrator on 2016/10/18.
 */
public class OnLineFragment extends MyBaseFragment {

    private WebView webView;
    private ProgressBar progressBar;
    private String onLineUrl;
    //    是否是邀请好友
    private boolean isInvit;
    private boolean daifuKuan;
    private String state;

    ValueCallback<Uri> mUploadMessage;
    ValueCallback<Uri[]> mFilePathCallback;
    private File newFile;
    private IWXAPI api;
    private SharedPreferences currShared;
    private boolean isWX;
    private String code;
    private SharedPreferences sp;
    private String pwd;
    private String loginId;
    private String timestamp;
    private String nonce;
    private String signLogin;
    private String name;
    //    广告页数据
    private String adLink, adId;
    private boolean isAd;
    private String productUrl;
    private String goodsId;
    private NotificationUtil notificationUtil;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = UIUtils.inflate(R.layout.fragment_online);
        webView = (WebView) view.findViewById(R.id.webView);
        progressBar = (ProgressBar) view.findViewById(R.id.myProgressBar);
        sp = new SharedConfig(UIUtils.getContext()).getCommoneSp();
        Bundle arguments = getArguments();
        if (arguments != null) {
            onLineUrl = arguments.getString(SpKey.URL, "");
            isInvit = arguments.getBoolean(SpKey.INVITURL, false);
            daifuKuan = arguments.getBoolean(SpKey.DAiFuKuan, false);
            isWX = arguments.getBoolean("isWX", false);
            code = arguments.getString("code");
            state = arguments.getString(SpKey.STATE, "");
//            广告页数据
            adLink = arguments.getString(SpKey.ADLINK, "");
            adId = arguments.getString(SpKey.ADID, "");
            isAd = arguments.getBoolean(SpKey.ISAD, false);
            productUrl = arguments.getString("productUrl", "");
            goodsId = arguments.getString("goodsId", "");
        }
        getConfig();
        initListener();
        return view;
    }

    /**
     * 获取基本信息
     */
    private void getBasicConfig() {
        name = sp.getString(SpKey.NAME, "");
        currShared = new SharedConfig(UIUtils.getContext(), name).getPrivateSp();
        pwd = currShared.getString(SpKey.PWD, "");
        loginId = currShared.getString(SpKey.LOGINID, "");
        timestamp = SignUtil.getTimeStamp(System.currentTimeMillis());
        nonce = String.valueOf(new Random().nextInt());
    }

    private void getConfig() {
        getBasicConfig();
        signLogin = SignUtil.signLogin(name, pwd, timestamp, nonce);
//        签名
        String sign = SignUtil.signForOnline(nonce, timestamp, signLogin, loginId);
        if (daifuKuan) {
            sign = SignUtil.signForFukuan(nonce, timestamp, signLogin, loginId, state, "stateOrder");
            onLineUrl = onLineUrl + "?type=" + "stateOrder" + "&state=" + state + "&nonce=" + nonce + "&timestamp=" + timestamp + "&loginId=" + loginId + "&signLogin=" + signLogin + "&sign=" + sign;
        } else if (isWX) {
            sign = SignUtil.signForOnlineWX(nonce, timestamp, signLogin, loginId, code);
            onLineUrl = onLineUrl + "?nonce=" + nonce + "&timestamp=" + timestamp + "&loginId=" + loginId + "&signLogin=" + signLogin + "&sign=" + sign + "&code=" + code;
        } else if (isAd) {
            sign = SignUtil.signForAdLink(nonce, timestamp, signLogin, loginId, adId);
            if (!TextUtils.isEmpty(loginId))
                onLineUrl = SpKey.BASEURL + "/wap" + adLink + "?nonce=" + nonce + "&timestamp=" + timestamp + "&loginId=" + loginId + "&signLogin=" + signLogin + "&id=" + adId + "&sign=" + sign;
            else {
                onLineUrl = SpKey.BASEURL + "/wap" + adLink + "?nonce=" + nonce + "&timestamp=" + timestamp + "&id=" + adId + "&sign=" + sign;
            }
            PrintUtil.printRespones("广告页:" + onLineUrl);
        } else if (!TextUtils.isEmpty(goodsId)) {//跳转到产品详情
            sign = SignUtil.signForGoods(nonce, timestamp, loginId, signLogin, goodsId);
            if (!TextUtils.isEmpty(loginId))
                onLineUrl = SpKey.BASEURL + "/detailPage?goodsId=" + goodsId + "&nonce=" + nonce + "&timestamp=" + timestamp + "&loginId=" + loginId + "&signLogin=" + signLogin + "&sign=" + sign;
            else {
                onLineUrl = SpKey.BASEURL + "/detailPage?goodsId=" + goodsId + "&nonce=" + nonce + "&timestamp=" + timestamp + "&sign=" + sign;
            }
        } else if (!isInvit) {
//            不是邀请好友需要签名，邀请好友扫码过来已经签名
            if (!TextUtils.isEmpty(loginId))
                onLineUrl = onLineUrl + "?nonce=" + nonce + "&timestamp=" + timestamp + "&loginId=" + loginId + "&signLogin=" + signLogin + "&sign=" + sign;
            else {
                onLineUrl = onLineUrl + "?nonce=" + nonce + "&timestamp=" + timestamp + "&sign=" + sign;
            }
        }
    }


    /**
     * 设置webView
     */
    private void setWebView() {
        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setDefaultZoom(WebSettings.ZoomDensity.FAR);
        settings.setSupportZoom(true);
        settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//适应屏幕，内容将自动缩放
        settings.setUseWideViewPort(true);
        settings.setDefaultTextEncodingName("utf-8");
        settings.setAppCacheEnabled(false);// 设置是否开启缓存
        settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        // 使用localStorage则必须打开
        settings.setDomStorageEnabled(true);
        settings.setGeolocationEnabled(true);
        settings.setRenderPriority(WebSettings.RenderPriority.HIGH);
        settings.setSupportMultipleWindows(true);
        settings.setSavePassword(false);
        settings.setJavaScriptCanOpenWindowsAutomatically(true);
        settings.setAllowFileAccess(true);
        settings.setTextSize(WebSettings.TextSize.NORMAL);
    }

    private void initListener() {
        setWebView();
//        settings.setUserAgentString(
//                "User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50");
//        String ua = webView.getSettings().getUserAgentString();
//        webView.getSettings().setUserAgentString(ua+"; HFWSH /"+2);
//        android.webkit.CookieManager.getInstance().setAcceptCookie(true);

        webView.setVerticalScrollbarOverlay(true);
        PrintUtil.printRespones("H5页面地址：" + onLineUrl);
        webView.loadUrl(onLineUrl);
//        webView.getSettings().setBlockNetworkImage(true);//拦截图片的加载，网页加载完成后再去除拦截
        webView.setWebChromeClient(new MyWebChromeClient());
        webView.setDownloadListener(new MyWebViewDownLoadListener());
        webView.setWebViewClient(new WebViewClient() {
                                     @Override
                                     public boolean shouldOverrideUrlLoading(final WebView view, final String url) {
                                         dealUrl(url);
                                         dealAlipay(view, url);
                                         return true;
                                     }
                                 }
        );
        ((FoundActivity) getActivity()).setOnBack(
                new FoundActivity.OnBack() {
                    @Override
                    public void onBack() {
                        if (webView.canGoBack()) {
                            webView.goBack();
                        } else {
                            getActivity().finish();
                        }
                    }
                }
        );
    }

    /**
     * 处理在线支付宝逻辑
     *
     * @param view
     * @param url
     */
    private void dealAlipay(final WebView view, String url) {
//        final PayTask task = new PayTask(getActivity());
////    通过返回的url无法获取到订单信息
//        final String ex = task.fetchOrderInfoFromH5PayUrl(url);
//        if (!TextUtils.isEmpty(ex)) {
//            new Thread(new Runnable() {
//                public void run() {
//                    final H5PayResultModel result = task.h5Pay(ex, true);
//                    if (!TextUtils.isEmpty(result.getReturnUrl())) {
//                        ThreadUtils.runOnUiThread(new Runnable() {
//                            @Override
//                            public void run() {
//                                ((FoundActivity) getActivity()).setTitleGone(false);
//                                view.loadUrl(result.getReturnUrl());
//                            }
//                        });
//                    }
//                }
//            }).start();
//        } else
        if (url.startsWith("alipays://")) {
            alipay(url);
        } else if (url.startsWith("wechat://"))
            startWxPay(url, "wechat://");
        else if (url.startsWith("wechatvipup://"))
            startWxPay(url, "wechatvipup://");
        else if (url.startsWith("wechatrecharge://"))
            startWxPay(url, "wechatrecharge://");
        else if (url.startsWith("wechatactivity://"))
            startWxPay(url, "wechatactivity://");
        else
            view.loadUrl(url);
    }

    private void alipay(String url) {
        //无法通过返回的url调起支付宝，手动通过Intent调起，会出现两个尝试调起支付宝的页面
        Intent intent;
        try {
            intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
        } catch (Exception e) {
//          没有安装支付宝
//          ToastUtils.showToast("没有安装支付宝");
        }
    }

    public void startWxPay(String url, String str) {
        String subString = url.substring(str.length());
        wChatPay(subString, str);
    }

    /**
     * 对url进行判断
     *
     * @param url
     */
    private void dealUrl(String url) {
        if (url.contains("spm"))
//            获取信息，登录app
            getUserId(url);
        else if (url.contains("loginOut"))
//            清空app数据
            clearStoreData();
    }

    int count;

    /**
     * 清除app中存储的数据
     */
    private void clearStoreData() {
        StoreInfo.getInstance().clearInfo(sp, currShared);
        EMClient.getInstance().logout(false, new EMCallBack() {
            @Override
            public void onSuccess() {
                PrintUtil.printRespones("环信退出成功");
            }

            @Override
            public void onError(int i, String s) {
                if (count < 3) {
                    count++;
                    clearStoreData();
                }
            }

            @Override
            public void onProgress(int i, String s) {

            }
        });
    }

    /**
     * 从url中截取userId
     *
     * @param url
     */
    private void getUserId(final String url) {
//        如果在App中未登录
        if (BaseProtocal.isGoLogin(true)) {
            String userId = url.substring(url.indexOf("spm") + 4);
            getInfo(userId);
        }
    }


    /**
     * 获取用户信息
     *
     * @param userId
     */
    private void getInfo(String userId) {
        BaseProtocal.builder(false).getUserInfo(new MyStringCallBack() {
            @Override
            public void onSuccess(String response) {
                PrintUtil.printRespones("从商城登录app获取用户信息", response);
                String state = JsonUtil.getState(response);
                if (TextUtils.equals(state, "1")) {
                    UserInfos userInfos = new Gson().fromJson(response, UserInfos.class);
                    PrintUtil.printRespones("从商城登录app获取到的用户密码：" + userInfos.userInfo.pwd);
                    loginHx(userInfos);
                }
            }

            @Override
            public void onFail(Exception e) {
            }
        }, userId);
    }

    /**
     * 环信登录
     */
    private void loginHx(final UserInfos userInfos) {
        DBManager.getInstance().closeDB();
//        用户昵称为环信ID
        DemoHelper.getInstance().setCurrentUserName(userInfos.userInfo.hxId);

//        已经登陆过，本不需再登陆，但有可能用户清除了缓存，但是环信仍然登陆着，需要先退出
        if (EMClient.getInstance().isLoggedInBefore()) {
            EMClient.getInstance().logout(false, new EMCallBack() {
                @Override
                public void onSuccess() {

                    loginToHx(userInfos.userInfo.hxId, userInfos.userInfo.pwd, userInfos);
                }

                @Override
                public void onError(int i, String s) {

                }

                @Override
                public void onProgress(int i, String s) {
                }
            });
            return;
        }
        loginToHx(userInfos.userInfo.hxId, userInfos.userInfo.pwd, userInfos);
    }

    /**
     * 登录到环信
     */
    private void loginToHx(final String hxName, String hxPwd, final UserInfos userInfos) {
        //环信登录
        EMClient.getInstance().login(hxName, hxPwd, new EMCallBack() {
            @Override
            public void onSuccess() {
                sp.edit().putString(SpKey.NAME, userInfos.userInfo.userName).commit();
                currShared = new SharedConfig(UIUtils.getContext(), userInfos.userInfo.userName).getPrivateSp();
                StoreInfo.getInstance().storeUserInfo(currShared, userInfos);
            }

            @Override
            public void onProgress(int progress, String status) {
            }

            @Override
            public void onError(final int code, final String message) {
            }
        });
    }

    /**
     * 下载监听
     */
    private class MyWebViewDownLoadListener implements DownloadListener {
        @Override
        public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
            if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                ToastUtils.showToast("前检查内存卡是否存在");
                return;
            }
            showUpdateDialog(url);
        }
    }

    private void showUpdateDialog(final String url) {

        final AlertDialog.Builder adb = new AlertDialog.Builder(getActivity());
//        最新版本描述
        adb.setMessage("您将下载数贸服务APP");

        adb.setPositiveButton("下载", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // 下载APK
                downLoadApk(url);
            }
        });

        adb.setNegativeButton("取消", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
            }
        });

        // 点击后退按键，取消对话框时，调用
        adb.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
            }
        });
        adb.show();
    }

    /**
     * 下载更新APK
     */
    protected void downLoadApk(String url) {
        if (notificationUtil == null)
            notificationUtil = new NotificationUtil(getActivity());
        notificationUtil.showNotification(101);

        // 下载路径为 sd 卡根目录下的 .apk 文件
        final String target = Environment.getExternalStorageDirectory().getAbsolutePath() + "/dmh";

        // 判断SD卡是否存在
        if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            ToastUtils.showToast(getActivity(), "没有发现SD卡，无法下载");
            return;
        }
        OkHttpUtils.get().url(url)
                .build()
                .execute(new FileCallBack(target, "dmh.apk") {
                             @Override
                             public void inProgress(float progress, long total, int id) {
                                 super.inProgress(progress, total, id);
                                 notificationUtil.updateProgress(101, progress);
                             }

                             @Override
                             public void onError(Call call, Exception e, int id) {
                                 ToastUtils.showToast("网络异常,请稍后重试");
                                 notificationUtil.cancel(101);
                             }

                             @Override
                             public void onResponse(File response, int id) {
                                 notificationUtil.cancel(101);
//                                 安装apk
                                 Intent intent = new Intent();
                                 intent.setAction("android.intent.action.VIEW");
                                 intent.addCategory("android.intent.category.DEFAULT");
                                 File apkFile = new File(target, "dmh.apk");
                                 intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");
                                 startActivityForResult(intent, 88);
                             }
                         }
                );
    }

    /**
     * 微信支付
     */
    private void wChatPay(String response, String str) {
        // 将该app注册到微信
        if (api == null) {
            api = WXAPIFactory.createWXAPI(UIUtils.getContext(), SpKey.WXAPPID, false);
            api.registerApp(SpKey.WXAPPID);
        }
        try {
            JSONObject json = new JSONObject(response);
            PayReq req = new PayReq();
            req.appId = json.getString("appid");
            req.partnerId = json.getString("partnerid");
            req.prepayId = json.getString("prepayid");
            req.nonceStr = json.getString("noncestr");
            req.timeStamp = json.getString("timestamp");
            req.packageValue = json.getString("package");
            req.sign = json.getString("sign");
            String code = json.optString("code");
//            req.extData = "app data";
            saveForShowSuccessInf(code, str);
            api.sendReq(req);
        } catch (JSONException e) {
        }
    }

    /**
     * 发送广播用于展示成功信息
     *
     * @param code
     * @param str
     */
    private void saveForShowSuccessInf(String code, String str) {
        currShared.edit().putBoolean("isOnline", true).commit();
        currShared.edit().putString("type", str).commit();
        currShared.edit().putString("code", code).commit();
    }

    /**
     * 上传图片>>>>>>>>>>>>>>>>>>>>>
     */
    public static final int FILECHOOSER_RESULTCODE = 1;
    private static final int REQ_CAMERA = FILECHOOSER_RESULTCODE + 1;
    private static final int REQ_CHOOSE = REQ_CAMERA + 1;

    private class MyWebChromeClient extends WebChromeClient {
        //        For Android >5.0
        public boolean onShowFileChooser(
                WebView webView, ValueCallback<Uri[]> filePathCallback,
                WebChromeClient.FileChooserParams fileChooserParams) {
            if (mFilePathCallback != null) return true;
            mFilePathCallback = filePathCallback;
            selectImage();
            return true;
        }

        /**
         * 上传信息
         *
         * @param uploadMsg
         * @param acceptType
         */
        // For Android 3.0+
        public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
            if (mUploadMessage != null) return;
            mUploadMessage = uploadMsg;
        }

        // For Android  > 4.1.1
        public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
            openFileChooser(uploadMsg, acceptType);
        }

        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            if (newProgress == 100) {
                progressBar.setVisibility(View.GONE);
            } else {
                if (View.INVISIBLE == progressBar.getVisibility()) {
                    progressBar.setVisibility(View.VISIBLE);
                }
                progressBar.setProgress(newProgress);
            }
            super.onProgressChanged(view, newProgress);
        }

        @Override
        public void onReceivedTitle(WebView view, String title) {
            super.onReceivedTitle(view, title);
            if (isAd || !TextUtils.isEmpty(goodsId) || onLineUrl.contains("wap/wallet"))
                ((FoundActivity) getActivity()).setTitle(title);
        }
    }

    /**
     * 检查SD卡是否存在
     *
     * @return
     */
    public final boolean checkSDcard() {
        boolean flag = Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED);
        if (!flag) {
            ToastUtils.showToast("请插入手机存储卡再使用本功能");
        }
        return flag;
    }

    String compressPath = "";

    protected final void selectImage() {
        if (!checkSDcard())
            return;
        compressPath = Environment
                .getExternalStorageDirectory()
                .getPath()
                + "/fuiou_wmp/temp";
        new File(compressPath).mkdirs();
        compressPath = compressPath + File.separator
                + "compress.jpg";
        chosePic();
    }

    /**
     * 本地相册选择图片
     */
    private void chosePic() {
        WebView_FileUtils.delFile(compressPath);
        Intent innerIntent = new Intent(Intent.ACTION_GET_CONTENT); // "android.intent.action.GET_CONTENT"
        innerIntent.setAction(Intent.ACTION_PICK);
        innerIntent.setType("image/*"); // 查看类型
        Intent wrapperIntent = Intent.createChooser(innerIntent, null);
        startActivityForResult(wrapperIntent, REQ_CHOOSE);

    }


    /**
     * 返回文件选择
     */
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        Uri chooseUri = Uri.parse("");
        if (intent == null) {
            if (mUploadMessage != null)
                mUploadMessage.onReceiveValue(chooseUri);
            mUploadMessage = null;
            if (mFilePathCallback != null) {
                Uri[] uris = new Uri[1];
                uris[0] = chooseUri;
                mFilePathCallback.onReceiveValue(uris);
                mFilePathCallback = null;
            }
            return;
        }
        if (intent != null && requestCode == REQ_CHOOSE) {
            chooseUri = afterChosePic(intent);
        }
        if (mFilePathCallback != null) {
            Uri[] uris = new Uri[1];
            uris[0] = chooseUri;
            mFilePathCallback.onReceiveValue(uris);
        } else {
            mUploadMessage.onReceiveValue(chooseUri);
        }
        mFilePathCallback = null;
        mUploadMessage = null;
        super.onActivityResult(requestCode, resultCode, intent);
    }

    /**
     * 选择照片后结束
     *
     * @param data
     */
    private Uri afterChosePic(Intent data) {

        // 获取图片的路径：
        String[] proj = {MediaStore.Images.Media.DATA};
        // 好像是android多媒体数据库的封装接口，具体的看Android文档
        Cursor cursor = getActivity().managedQuery(data.getData(), proj, null, null, null);
        if (cursor == null) {
            ToastUtils.showToast("上传的图片仅支持png或jpg格式");
            return null;
        }
        // 按我个人理解 这个是获得用户选择的图片的索引值
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        // 将光标移至开头 ，这个很重要，不小心很容易引起越界
        cursor.moveToFirst();
        // 最后根据索引值获取图片路径
        String path = cursor.getString(column_index);
        if (path != null && (path.endsWith(".png") || path.endsWith(".PNG") || path.endsWith(".jpg") || path.endsWith(".JPG"))) {
            newFile = WebView_FileUtils.compressFile(path, compressPath);
            return Uri.fromFile(newFile);
        } else {
            ToastUtils.showToast("上传的图片仅支持png或jpg格式");
        }
        return null;
    }

    /**
     * <<<<<<<<<<<<<<<<<<<<<上传图片
     */

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (webView != null) {
            webView.removeAllViews();
            try {
                webView.destroy();
            } catch (Exception t) {
            }
            webView = null;
        }
    }
}
